package org.dim.utils;

import org.dim.config.Property;

import javax.xml.bind.ValidationEvent;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

public class BeanUtils {
    /**
     *
     * @param object bean对象
     * @param name   属性的名称
     * @return
     */
    public  static Method getWriteMethod(Object beanObj,String name){
        //使用内省来实现方法,调用set方法，将xml/bean/property/name：bob  注入person的name属性里面
         Method method=null;
              try{
                  //分析bean对象
                  BeanInfo info= Introspector.getBeanInfo(beanObj.getClass());
                  //获得属性的描述器
                  PropertyDescriptor[] pds=info.getPropertyDescriptors();
                  if (pds!=null){
                      for (PropertyDescriptor pd:pds){
                          //是否有目标属性
                          String pName=pd.getName();
                          //描述器中的属性和目标属性比对
                          if (pName.equals(name)){
                              //获取set方法
                              method=pd.getWriteMethod();
                             // method.invoke(beanObj, value);
                          }
                      }
                  }
              } catch (IntrospectionException e) {
                  e.printStackTrace();
              }
              if (method==null){
                  throw new RuntimeException("检查set方法是否创建");
              }
              if (method==null){
                  throw new RuntimeException("检查方法写对了吗");
              }
        return method;
    }
}
